问题描述:
有一个5x5的方格棋盘,棋盘上放着24颗不同的棋子,分别用英文大写字母A,B, ...,X 来表示,棋盘上还有一个方格空着。游戏的每一步是将空格上、下、左、右中的一颗棋子移入空格,这四种操作分别用1、2、3、4来表示。
如果给出棋盘的初始状态和一定顺序的有限操作序列,就可以得到唯一的目标状态。
现已知棋盘的初态、终态和被打乱后的操作序列( 操作序列长度 L<=50 ),要求计算和输出原来正确的操作序列。若无解,则输出0。
解法讨论:
猛一看,解这个问题似乎无从下手。但看到5x5的棋盘及所要求的操作序列,就想到这是否是一个图的问题?顺着这个思路先把棋盘抽象成一个二维的图,棋盘中的每个格子就对应着图的一个结点,每个结点必须且只能与它上、下、左、右四个相邻的结点相连(位于图四个边缘上的结点则相应地减少相连结点)。这样一来,要求的对棋盘的操作序列怎样才能得到呢?这种操作对这张图来说又意味着什么?
重新审视题目,如果换一个角度,不是从移动的棋子而是从棋盘中空格的角度来看,又会怎么样?很明显,从这个角度看,从棋盘初态到终态实际上可以看作空格的移动的结果。呵,看来思路是对头了,移动的棋子实际上构成了棋盘上空格的移动路径。那么这个问题就变成了:已知棋盘的初态和终态,求空格所走过的路径;再进一步,这个问题可以抽象为,已知一张二维图(图中各结点的连接要求如前)中的两个结点,求连接此两结点的路径。哈哈,这不就是典型的图的搜索问题吗ÿ